package main

import "fmt"

/*
闭包可以理解成“定义在一个函数内部的函数“。在本质上，闭包是将函数内部和函数外部
连接起来的桥梁。或者说是函数和其引用环境的组合体
*/
func adder() func(int) int {
	var x int
	return func(y int) int {
		x += y
		return x
	}
}

func main() {

	// 变量 f 是一个函数并且它引用了其外部作用域中的 x 变量，此时 f 就是一个闭包。 在 f 的生
	//命周期内，变量 x 也一直有效。
	var f = adder()
	fmt.Println(f)
	fmt.Println(f(100))
	fmt.Println(f(100))

}
